package com.idis.dbApp.mapper;

import com.idis.entity.User;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

import java.util.List;

/**
 * Created by Ming on 2018/1/28.
 */

/**
 * 登录用户数据操作
 */
public interface UserMapper {

    /**
     * 获取所有用户信息
     * @return 用户信息集
     */
    @Select({
            "select * from user"
    })
    List<User> findAll();

    /**
     * 根据用户名搜索用户
     * @param username 用户信息
     * @return 用户信息集
     */
    @Select({
            "select * from user",
            "where username=#{username,jdbcType=VARCHAR}"
    })
    List<User> findByUsername(String username);

    /**
     * 根据examole有效属性值搜索用户，空信息无效
     * @param example 用户信息
     * @return 用户信息集
     */
    @SelectProvider(type = UserSqlProvider.class,method = "selectByEample")
    List<User> findByProperty(User example);

    /**
     * 获取用户数量
     * @return 用户数量
     */
    @Select({
            "select count(*) from user"
    })
    int countUser();

    /**
     * 删除用户信息
     * @param id 用户ID
     * @return 成功删除的数量
     */
    @Delete({
        "delete from user",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int deleteByPrimaryKey(Integer id);

    /**
     * 插入新用户记录
     * @param record 用户信息
     * @return 成功插入的数量
     */
    @Insert({
        "insert into user (username, ",
        "password, role,phone)",
        "values (#{username,jdbcType=VARCHAR}, ",
        "#{password,jdbcType=VARCHAR}, #{role,jdbcType=TINYINT}, #{phone,jdbcType=VARCHAR})"
    })
    int insert(User record);

    /**
     * 插入新用户信息，仅插入非空信息
     * @param record 用户信息
     * @return 成功插入的数量
     */
    @InsertProvider(type=UserSqlProvider.class, method="insertSelective")
    int insertSelective(User record);

    /**
     * 根据ID查询用户
     * @param id 用户ID
     * @return 用户信息
     */
    @Select({
        "select",
        "id, username, password, role,phone",
        "from user",
        "where id = #{id,jdbcType=INTEGER}"
    })
    @Results({
        @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
        @Result(column="username", property="username", jdbcType=JdbcType.VARCHAR),
        @Result(column="password", property="password", jdbcType=JdbcType.VARCHAR),
        @Result(column="role", property="role", jdbcType=JdbcType.TINYINT),
        @Result(column="phone", property="phone", jdbcType=JdbcType.VARCHAR)
    })
    User selectByPrimaryKey(Integer id);

    /**
     * 更新用户信息，仅更新非空属性，ID必须
     * @param record 用户信息
     * @return 成功更新的数量
     */
    @UpdateProvider(type=UserSqlProvider.class, method="updateByPrimaryKeySelective")
    int updateByPrimaryKeySelective(User record);

    /**
     * 更新用户信息，ID必须
     * @param record 用户信息
     * @return 成功更新的数量
     */
    @Update({
        "update user",
        "set username = #{username,jdbcType=VARCHAR},",
          "password = #{password,jdbcType=VARCHAR},",
          "role = #{role,jdbcType=TINYINT},",
          "phone = #{phone,jdbcType=VARCHAR}",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int updateByPrimaryKey(User record);
}